<?php
/**
 *
 * @author     Daniel Botelho <botelho.daniel@gmail.com>
 */
class OSConfig
{
  public static function add($key,$value,$root=false)
  {
  	$configs = sfConfig::getAll();
  	$configs[($root)?$key:"app_opensocial_$key"] = $value;
  	sfConfig::add($configs);
  }
  /**
   * This method returns the application base url
   * @return string The application base url
   */
  public static function getApplicationBaseUrl()
  {
  	return sfConfig::get('app_opensocial_base_url');
  }
  
  /**
   * Este método analiza determinado código html e faz os import's necessários
   */
  public static function fixModulePrefs($html)
  {
  	//TODO: criar esta função!
  }
  
  private static function importFeature($feature)
  {
  	$configs = sfConfig::getAll();
    foreach ($configs['app_opensocial_requires'] as $require) {
      if(strcmp($require['feature'],$feature) == 0)
        return;
    }
    $configs['app_opensocial_requires'][]['feature'] = $feature;
    sfConfig::add($configs);
  }
  /**
   * Adiciona o DynamicHeight automaticamente ao gadget, quando alguma função o use.
   * Garantir que será inserido no ficheiro XML "<Require feature="dynamic-height" /> 
   * @return string The <Require feature="dynamic-height" /> to append in the moduleprefs  
   */
  public static function importFeatureDynamicHeight()
  {
  	OSConfig::importFeature('dynamic-height');
  }
  /**
   * Adds support for minimessages
   *
   */
  public static function importMiniMessage()
  {
  	OSConfig::importFeature('minimessage');
  }
  
  /**
   * Adds support for tabs
   */
  public static function importTabs()
  {
  	OSConfig::importFeature('tabs');
  }
  
  /**
   * Adds skins feature to the gadget.
   */
  public static function importFeatureSkins()
  {
  	OSConfig::importFeature('skins');
  }

  /**
   * Includes <Require feature="views" />  
   *
   */
  public static function importViews()
  {
  	OSConfig::importFeature('views');
  }
  
  /**
   * Adiciona o settitle automaticamente ao gadget, quando alguma função o use. 
   * Garantir que será inserido no ficheiro XML "<Require feature="settitle" />"
   */
  public static function importSetTitle()
  {
  	OSConfig::importFeature('settitle');
  }
  
  /**
   * Adiciona o flash automaticamente ao gadget, quando alguma função o use. 
   * Garantir que será inserido no ficheiro XML "<Require feature="flash" />"
   */
  public static function importFlash()
  {
  	OSConfig::importFeature('flash');
  }
  
  /**
   * Adiciona o SetPrefs automaticamente ao gadget, quando alguma função o use. 
   * Garantir que será inserido no ficheiro XML "<Require feature="setprefs" />"
   */
  public static function importSetPrefs()
  {
  	OSConfig::importFeature('setprefs');
  }
  
  /**
  * Esta função incluiu todos os módulos definidos no ficheiro YAML
  */
  public static function include_modules()
  {
    return OSConfig::include_modulePrefs(sfConfig::get('app_opensocial_module_prefs'),sfConfig::get('app_opensocial_requires'),sfConfig::get('app_opensocial_locale'));
  }

  /**
  * Esta função permite criar os modulos com valores definidos pelo utilizador( não consulta o ficheiro YAML)
  */
  private static function include_modulePrefs($module_pram,$requires,$locales)
  {
    $content = '';
    foreach ($locales as $locale)
    {
      $content.= tag('Locale', $locale);
    }
    foreach ($requires as $require)
    {
      $content.= tag('Require', $require);
    }
    return content_tag("ModulePrefs",$content,$module_pram)."\n";
  }

  /**
  * Esta função incluiu as UserPref definidas no ficheiro YAML
  */
  public static function include_userprefs(){
    $userPrefs = array();
    $userPrefs = sfConfig::get('app_opensocial_user_prefs');
    $content = '';
    if($userPrefs)
    foreach($userPrefs as $pref)
    {
      $enum_content = '';
      // se existir "enum_value", vai percorrer todos os enums e guardado-los em "enum_content"
      if(array_key_exists('enum_value',$pref) && is_array($pref['enum_value'])){
        foreach ($pref['enum_value'] as $enum)
        {
          $enum_content.= tag('EnumValue', $enum);
        }
        unset($pref[enum_value]);
      }

      // se existir enums:
      if( strlen($enum_content) ){
        $content.= content_tag("UserPref",$enum_content,$pref)."\n";
      }else{
        $content.= tag("UserPref",$pref)."\n";
      }
    }
    return $content;
  }
}
